'use strict'

module.exports = (option, app) => {
  return async function (ctx, next) {
    try {
      await next()
    } catch (err) {
      // 所有的异常都在 app 上触发一个 error 事件，框架会记录一条错误日志
      ctx.logger.info(err, err.errors, err.message)
      app.emit('error', err, this)
      const status = err.status || 500
      // 生产环境时 500 错误的详细错误内容不返回给客户端，因为可能包含敏感信息

      if(err.message=='Unauthorized') {
        err.message = ctx.__('Unauthorized')
      }
      const error = status === 500 && app.config.env === 'prod' ?
      ctx.__('Internal Server Error') :
        err.errors||err.message
      // 从 error 对象上读出各个属性，设置到响应中
      ctx.body = {
        code: status,
        message: error
      }
      // if (status === 422) {
      //   ctx.body.message = err.errors
      // }
      ctx.status = status
      // await next()
    }
  }
}